/**
 * filter() 方法创建给定数组一部分的浅拷贝，其包含通过所提供函数实现的测试的所有元素。
 *
 * 返回新数组,filter方法将返回一个不包含空对象的新数组，
 * 也就是[1,2,,3]中会返回[1,2,3],
 * 这点和map不一样
 * @param {*} callback
 * @returns
 */
Array.prototype.myFilter = function (callback) {
  if (typeof callback != "function") {
    throw new TypeError(
      "callback is a function ， 许多年以后，会感谢努力的自己!"
    );
  }

  const result = [];
  const len = this.length;

  for (let i = 0; i < len; i++) {
    // filter会过滤掉empty item
    if (Object.prototype.hasOwnProperty.call(this, i)) {
      if (callback(this[i], i, this)) {
        result.push(this[i]);
      }
    }
  }

  return result;
};

// egg
let arr = [1, 2, , null, undefined, 3, 4, 5];
const res = arr.myFilter((item) => {
  return [];
});
console.log("[ res ] >", res);

const res2 = arr.filter((item) => {
  return [];
});
console.log("[ ress2 ] >", res2);
